package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * 集合的遍历
 *
 * 集合提供了统一的遍历方式:迭代器模式
 * Iterator iterator()
 * 该方法可以获取一个遍历当前集合元素的迭代器
 *
 *                    die(二声)
 * java.util.Iterator 迭代器接口
 * 该接口定义了迭代器遍历集合的相关操作,不同的集合都提供了一个用于遍历自身元素的实现类.
 *
 * 迭代器遍历集合遵从的步骤为:问->取->删
 * 其中删除元素不是迭代过程中的必要操作
 */
public class IteratorDemo {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        c.add("#");
        c.add("four");
        c.add("#");
        c.add("five");
        System.out.println(c);

        Iterator it = c.iterator();
        /*
            boolean hasNext()
            通过迭代器判断是否还有下一个元素可供迭代(问)

            E next()
            迭代器向后移动一个元素位置,并获取该元素
         */
        while(it.hasNext()){
            String str = (String)it.next();
            System.out.println(str);
            //好习惯:字符串变量与字面量equals比较时,应当写作:字面量.equals(变量),避免空指针产生
            if("#".equals(str)){
                /*
                    迭代器要求:在遍历的过程中不可以通过集合的方法增删元素,否则会抛出并发修改异常:
                    java.util.ConcurrentModificationException
                 */
//                c.remove(str);
                /*
                    迭代器的remove方法可以删除迭代器本次next方法获取的元素.
                    remove方法不可连续调用,调用一次后只有再次next()后方可再次删除
                 */
                it.remove();
            }
        }
        System.out.println(c);

    }
}











